package demo3;


import java.util.concurrent.Callable;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: mac
 * Date: 2022-09-06
 * Time: 18:06
 */

//接口：
    //1.使用interface来修饰的，interface IA{}
    //2.接口当中的普通方法，不能有具体实现，非要实现，只能通过关键字default实现
    //3.接口当中可以有static的方法
    //4.里面所有的方法都是public的
    //5.抽象方法，默认都是public abstract的
    //6.接口是不能通过关键字new来实例化的
    //7.类和接口之间的关系是通过implement实现的
    //8.当一个类实现了一个接口，就必须要重写接口当中的抽象方法
    //9.接口当中的成员，默认是public static final修饰的
    //10.当一个类实现一个接口，重写这个方法的时候，必须加上public
    //11.对于同一个子类只能继承一个父类，但是可以实现多个接口，接口间用逗号链接
    //12.接口和接口之间可以使用extends来操作它们的关系，此时意味：拓展
    //一个接口通过extends来拓展另一个接口的功能。此时当一个类D 通过implements来实现这个接口B
    //的时候，不仅仅是B的抽象方法，还有它从接口A继承的接口A中的方法
interface IShape {
    public abstract void draw();//不加关键字也默认public abstract
    /*public void func(){//报错

    }*/
    /*default public void func(){
        System.out.println("默认的方法");
    }
    public static void funcStatic(){
        System.out.println("静态方法");
    }*/

}
class Rect implements IShape {
    @Override
    public void draw() {
        System.out.println("♦");
    }

}
class Flower implements IShape {
    @Override
    public void draw(){
        System.out.println("❀");
    }
}

class Triangle implements IShape {
    @Override
    public void draw(){
        System.out.println("△");
    }
}

class Clyle implements IShape {
    @Override
    public void draw(){
        System.out.println("●");
    }
}

public class Test {

    public static void drawMap(IShape iShape){
        iShape.draw();
    }
    public static void main(String[] args) {
        //IShape iShape = new IShape();//ERROR
        IShape iShape = new Rect();
        drawMap(iShape);
        Clyle clyle = new Clyle();
        drawMap(clyle);
    }
}
